package com.duan.laugh.mp.controller;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.duan.laugh.common.core.util.Query;
import com.duan.laugh.common.core.util.R;
import com.duan.laugh.mp.api.pojo.entity.MpTemplate;
import com.duan.laugh.mp.service.IMpTemplateService;
import io.swagger.annotations.ApiOperation;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.mp.api.WxMpTemplateMsgService;
import me.chanjar.weixin.mp.bean.template.WxMpTemplateIndustry;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.Map;

/**
 * <p>
 * 微信公众号模版 controller
 * </p>
 *
 * @author liutf
 * @since 2019-10-30
 */
@Slf4j
@RestController
@RequestMapping("wxtemplate")
public class MpTemplateController {

    @Autowired
    private IMpTemplateService mpTemplateService;

    private WxMpTemplateMsgService templateMsgService = null/*WxMpConfiguration.getMpServices().get("wxa50010df48eec30c").getTemplateMsgService()*/;

    /**
     * 新增维护微信模板
     *
     * @param mpTemplate 实体
     * @return true/false
     */
    @PostMapping
    @ApiOperation("新增维护微信模板")
    public R save(@RequestBody MpTemplate mpTemplate) {
        return R.ok(mpTemplateService.save(mpTemplate));
    }

    /**
     * 根据id查看维护微信模板
     *
     * @param id
     * @return MpTemplate
     */
    @GetMapping("/{id}")
    @ApiOperation("根据id查看维护微信模板")
    public R<MpTemplate> getById(@PathVariable String id) {
        return R.ok(mpTemplateService.getById(id));
    }

    /**
     * 分页查询维护微信模板
     *
     * @param params 分页对象
     * @return 分页对象
     */
    @PostMapping("/page")
    @ApiOperation("分页查询维护微信模板")
    public IPage<MpTemplate> page(@RequestBody Map<String, Object> params) {
        return mpTemplateService.page(new Query<>(params));
    }

    /**
     * 根据id删除维护微信模板
     *
     * @param id
     * @return true/false
     */
    @DeleteMapping("/{id}")
    @ApiOperation("根据id删除维护微信模板")
    public R removeById(@PathVariable String id) {
        return R.ok(mpTemplateService.removeById(id));
    }

    /**
     * 根据id修改维护微信模板
     *
     * @param mpTemplate 实体
     * @return true/false
     */
    @PutMapping
    @ApiOperation("根据id修改维护微信模板")
    public R updateById(@RequestBody MpTemplate mpTemplate) {
        return R.ok(mpTemplateService.updateById(mpTemplate));
    }

    /**
     * 设置所属行业,每月可修改行业1次，帐号仅可使用所属行业中相关的模板
     *
     * @param industry_id1 公众号模板消息所属行业编号
     * @param industry_id2 公众号模板消息所属行业编号
     * @return
     */
    @PostMapping("/industry")
    @SneakyThrows
    @ApiOperation("设置所属行业,每月可修改行业1次，帐号仅可使用所属行业中相关的模板")
    public R setTemplateIndustry(@RequestBody Map map) {
        String industry_id1 = String.valueOf(map.get("industry_id1"));
        String industry_id2 = String.valueOf(map.get("industry_id2"));
        WxMpTemplateIndustry industry = new WxMpTemplateIndustry(
                new WxMpTemplateIndustry.Industry(industry_id1),
                new WxMpTemplateIndustry.Industry(industry_id2));
        templateMsgService.setIndustry(industry);
        return R.ok();
    }

    /**
     * 获取设置的行业信息
     *
     * @return
     */
    @GetMapping("/industry")
    @SneakyThrows
    @ApiOperation("获取设置的行业信息")
    public R getTemplateIndustry() {
        final WxMpTemplateIndustry industry = templateMsgService.getIndustry();
        return R.ok(industry);
    }

    /**
     * 获取已添加至帐号下所有模板列表
     *
     * @return
     */
    @GetMapping
    @SneakyThrows
    @ApiOperation("获取已添加至帐号下所有模板列表")
    public R getAllTemplate() {
        return R.ok(templateMsgService.getAllPrivateTemplate());
    }

    /**
     * 获得模板ID
     *
     * @param id
     * @return
     */
    @GetMapping("id/{id}")
    @SneakyThrows
    @ApiOperation("获得模板ID")
    public R getTemaplteId(@PathVariable String id) {
        return R.ok(templateMsgService.addTemplate(id));
    }

    /**
     * 删除账号下的模板
     *
     * @return
     */
    @DeleteMapping("/account/{id}")
    @SneakyThrows
    @ApiOperation("删除账号下的模板")
    public R deleteTemplate(@PathVariable("id") String templateId) {
        if (templateMsgService.delPrivateTemplate(templateId))
            return R.ok();
        else
            return R.failed();
    }

}
